Add diagnostics for XID collisions
authorMatthias Clasen <mclasen@redhat.com>
Tue, 5 May 2009 23:29:05 +0000 (19:29 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 May 2009 23:29:05 +0000 (19:29 -0400)
This should help with diagnosing crashes caused by over-eager XID
reuse in Xlib, see bug 581526.

gdk/x11/gdkxid.c

index 1d18b557e0f76f6ac34dc8bf3bdece493ea4c35f..b4b46fe05f0bb8ab34480d00fff4490eb491662f 100644 (file)
@@ -47,16 +47,19 @@ _gdk_xid_table_insert (GdkDisplay *display,
                       gpointer    data)
 {
   GdkDisplayX11 *display_x11;
-  
+
   g_return_if_fail (xid != NULL);
   g_return_if_fail (GDK_IS_DISPLAY (display));
-  
+
   display_x11 = GDK_DISPLAY_X11 (display);
 
   if (!display_x11->xid_ht)
     display_x11->xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
                                            (GEqualFunc) gdk_xid_equal);
 
+  if (g_hash_table_lookup (display_x11->xid_ht, xid))
+    g_warning ("XID collision, trouble ahead");
+
   g_hash_table_insert (display_x11->xid_ht, xid, data);
 }
 
@@ -65,11 +68,11 @@ _gdk_xid_table_remove (GdkDisplay *display,
                       XID         xid)
 {
   GdkDisplayX11 *display_x11;
-  
+
   g_return_if_fail (GDK_IS_DISPLAY (display));
-  
+
   display_x11 = GDK_DISPLAY_X11 (display);
-  
+
   if (display_x11->xid_ht)
     g_hash_table_remove (display_x11->xid_ht, &xid);
 }